package br.com.documentos.controller;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import br.com.documentos.model.entity.ParametroDocumentoUsuario;
import br.com.documentos.model.entity.TipoDocumentoUsuario;
import br.com.documentos.model.entity.enuns.TipoParametro;
import br.com.documentos.model.service.TipoDocumentoService;
import br.com.documentos.model.util.StringUtil;
import br.com.documentos.model.vo.UsuarioAuthentication;

@ManagedBean
@ViewScoped
public class TipoDocumentoMB extends ManagerBeanBase {

	private TipoDocumentoUsuario tipoDocumento;
	
	private String resultado;
	
	private Integer ordem;
	
	@ManagedProperty("#{tipoDocumentoService}")
	private TipoDocumentoService tipoDocumentoService;
	
	public void zeraParametros(){
		ordem = 1;
		tipoDocumento = new TipoDocumentoUsuario();
		tipoDocumento.addParametro( new ParametroDocumentoUsuario( ordem ++) );
		tipoDocumento.addParametro( new ParametroDocumentoUsuario( ordem ++) );
		tipoDocumento.addParametro( new ParametroDocumentoUsuario( ordem ++) );		
	}
	
	public void adicionarparametro(){
		if( ordem <= 5 ){
			tipoDocumento.addParametro( new ParametroDocumentoUsuario( ordem ++) );
		}
		else {
			addError("Configuração máxima de 5 parâmetros.");
		}
	}
	
	public void adicionarTipoDocumento(){
		tipoDocumento.setUsuario( UsuarioAuthentication.getUsuarioLogado() );
		
		List<ParametroDocumentoUsuario> parametros = new ArrayList<ParametroDocumentoUsuario>();
		
		for( ParametroDocumentoUsuario parametro : tipoDocumento.getParametros() ){
			
			if( StringUtil.isEmpty(parametro.getNome()) && parametro.getTipoParametro() == null ){
				continue;
			}
			
			if( StringUtil.isEmpty(parametro.getNome()) ){
				addError("Parâmetro "+ parametro.getOrdem() +": Campo Nome obrigatório.");
				return;
			}
			
			if( parametro.getTipoParametro() == null ){
				addError("Parâmetro "+ parametro.getOrdem() +": Campo Tipo obrigatório.");
				return;
			}
			
			parametro.setTipoDocumento(tipoDocumento);
			parametros.add(parametro);
		}
		
		tipoDocumento.setParametros(parametros);
		tipoDocumentoService.salvarTipoDocumentoUsuario(tipoDocumento);
	}
	
	public TipoParametro[] getTiposParametro(){
		return TipoParametro.values();
	}

	public TipoDocumentoUsuario getTipoDocumento() {
		return tipoDocumento;
	}

	public void setTipoDocumento(TipoDocumentoUsuario tipoDocumento) {
		this.tipoDocumento = tipoDocumento;
	}

	public String getResultado() {
		return resultado;
	}

	public void setResultado(String resultado) {
		this.resultado = resultado;
	}

	public TipoDocumentoService getTipoDocumentoService() {
		return tipoDocumentoService;
	}

	public void setTipoDocumentoService(TipoDocumentoService tipoDocumentoService) {
		this.tipoDocumentoService = tipoDocumentoService;
	}
	
}
